package cn.itsource.ymcc.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;

@Slf4j
public class LoginContext {

    /**
	 * 获取用户信息
     * SpringCloudOAuth2里面的SpringSecurity方式获取当前登录用户信息
     *  SecurityContextHolder.getContext().getAuthentication().getPrincipal()
     *      获取到的是自定义的MybatisPlusUserDetailsService中返回new User构造方法的第一个参数
     *  SecurityContextHolder.getContext().getAuthentication().getAuthorities()
     *      获取到的是自定义的MybatisPlusUserDetailsService中返回new User构造方法的第三个参数
     *  但是请注意：
     *      这个方式要能够获取到数据，前提是：
     *          1）你已经登录【请求头中必须要有Authorization这个请求头，值还必须以bearer空格开头】
     *          2）这段代码只能在认证授权服务和资源服务中使用；
     */
    public static JSONObject getLogin(){
        try {
            //获取上下文
            SecurityContext context = SecurityContextHolder.getContext();

            if(context == null){
                return null;
            }

            Authentication authentication = context.getAuthentication();

            if(authentication == null){
                return null;
            }
			//转对象
            JSONObject jsonObject = JSON.parseObject((String) authentication.getPrincipal());
            return jsonObject;

        }catch (Exception e){
            log.error("用户登录对象获取失败");
            e.printStackTrace();
            return null;
        }
    }
}